get请求清爽写法
网址构成¶
通过抓包的方式得到了网页的URL,有的时候网址很复杂,如果还要进行翻页等操作比较麻烦,如下
https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.center&searchid=49795481517653141&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=10&w=%E5%91%A8%E6%9D%B0%E4%BC%A6&g_tk=1458235854&loginUin=974542197&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=0
一般来说一个URL: 前半部分大多形如
https://xx.xx.xxx/xxx/xxx
后半部分,两半部分通过**?**来分割
xx=xx&xx=xxx&xxxxx=xx&……
例如
https://www.zhihu.com/search?type=content&q=%E5%AE%87%E5%AE%99%E5%A4%A7%E7%88%86%E7%82%B8 前半部分https://www.douban.com/search 后半部分q=%E6%B5%B7%E8%BE%B9%E7%9A%84%E5%8D%A1%E5%A4%AB%E5%8D%A1 中间用?隔开,这前半部分是我们所请求的地址,它告诉服务器,我想访问这里。而后半部分,就是我们的请求所附带的参数,它会告诉服务器,我们想要什么样的数据。这参数的结构,会和字典很像,有键有值,键值用=连接;每组键值之间,使用&来连接。
带参请求清爽的写法¶
当然上一步的话我们已经可以写代码爬取数据了,但是大串的URL看了很不舒服,有没有更清爽的写法呢?事实上,requests模块里的requests.get()提供了一个参数叫params,可以让我们用字典的形式,把参数传进去。所以,其实我们可以把Query String Parametres里的内容,直接复制下来,封装为一个字典,传递给params。只是有一点要特别注意:要给他们打引号,让它们变字符串。
清爽代码
import requests # 引用requests模块 url = 'https://c.y.qq.com/base/fcgi-bin/fcg_global_comment_h5.fcg' # 请求歌曲评论的url参数的前面部分 for i in range(5): params = { 'g_tk':'5381', 'loginUin':'0', 'hostUin':'0', 'format':'json', 'inCharset':'utf8', 'outCharset':'GB2312', 'notice':'0', 'platform':'yqq.json', 'needNewCode':'0', 'cid':'205360772', 'reqtype':'2', 'biztype':'1', 'topid':'102065756', 'cmd':'6', 'needmusiccrit':'0', 'pagenum':str(i), 'pagesize':'15', 'lasthotcommentid':'song_102065756_3202544866_44059185', 'domain':'qq.com', 'ct':'24', 'cv':'10101010' } # 将参数封装为字典 res_comments = requests.get(url,params=params) # 调用get方法,下载这个字典 json_comments = res_comments.json() list_comments = json_comments['comment']['commentlist'] for comment in list_comments: print(comment['rootcommentcontent']) print('-----------------------------------')